﻿/* Indrek Kõue @ 11.10.2010 */

using System;
using System.Text;
using System.Globalization;

namespace TnaguTetris
{
    /// <summary>
    /// Seda klassi kasutatakse edetabeli andmete krüpteerimiseks, et teha keerulisemaks
    /// skoori muutmine läbi XML faili kolmandate osapoolte poolt (nt. notepadiga).
    /// </summary>
    static class Krypteerimine
    {


        /// <summary>
        /// Kasutaja tulemuse krüpteerimine. Muudame kasutaja tulemuse inimesele loetamatuks.
        /// int > hex > reverse hex > add garbage(22) > done 
        /// </summary>
        /// <param name="sisendSkoor">Avatekst kasutaja punktid.</param>
        /// <returns>Tagastab "läbu" mida inimesel võimalik lugeda pole.</returns>
        static public String KrypteeriTulemus(int j)
        {

            string jj = "";
            Random ii = new Random();

            for (int i = j.ToString("X").ToCharArray().Length - 1; i >= 0; i--)
            {
                jj += j.ToString("X").ToCharArray()[i];
            }

            for (int i = 0; i < 22; i++)
            {
                jj += ii.Next(16).ToString("X");
            }

            return jj;

        }


        /// <summary>
        /// Muudab "läbu" taas inimesele loetavaks numbriks
        /// </summary>
        /// <param name="krypteeritudTekst">Krüpteeritud string</param>
        /// <returns>Tagastab loetava tulemuse täisarvuna</returns>
        static public int DeKrypteeriTulemus(String ii)
        {

            string iiii = "";

            string iii = ii.Remove(ii.Length - 22);

            char[] j = iii.ToCharArray();

            for (int i = j.Length - 1; i >= 0; i--)
            {
                iiii += j[i];
            }

            return int.Parse(iiii, NumberStyles.AllowHexSpecifier);

        }


        /// <summary>
        /// Kasutajanime krüpteerimine
        /// string > UTF-8 byte array > E divider > Done
        /// </summary>
        /// <param name="sisendNimi">Avatekst kasutajanimi</param>
        /// <returns>Kasutajanimi krüpteeritud kujul</returns>
        static public String KrypteeriNimi(String sisendNimi)
        {
            string vastus = "";

            byte[] temp = Encoding.UTF8.GetBytes(sisendNimi);

            foreach (var minuMuutuja in temp)
            {
                vastus += minuMuutuja + "E";
            }

            return vastus;
        }


        /// <summary>
        /// Kasutajanime lahtikrüpteerimine
        /// </summary>
        /// <param name="sisendNimi">Kasutajanimi krüpteeritud kujul</param>
        /// <returns>Kasutajanimi normaalkujul</returns>
        static public String DeKrypteeriNimi(String sisendNimi)
        {

            string[] temp = sisendNimi.Split('E');
            byte[] temp2 = new byte[temp.Length];

            for (int i = 0; i < temp.Length - 1; i++)
            {
                temp2[i] = Convert.ToByte(temp[i]);
            }

            string ii = Encoding.UTF8.GetString(temp2);
            string jj = ii.Remove(ii.Length - 1);

            return jj;
        }


    }

}